General Guidance : overfit
Framework of ML
我们已经看了作业一了,其实之后好几个作业,它看起来的样子,基本上都是大同小异

就是你会有一堆训练的资料,这些训练集裡面,会包含了跟的hat, 和跟它对应的, 跟它对应的,一直到 还有它对应的
测试集,测试集就是你只有x没有y,其实在之后每一个作业,看起来都是非常类似的格式

- 作业二,其实是做语音辨识,我们的x就是非常小的一段声音讯号,其实这个不是真正完整的语音辨识系统,它是语音辨识系统的一个阉割版,ŷ是要去预测判断,这一小段声音讯号,它对应到哪一个phoneme。你不知道phoneme是什麼没有关係,你就把它想成是音标就可以了
- 作业三叫做图像识别,这个时候我们的x是一张图片,ŷ是机器要判断说这张图片裡面,有什麼样的东西
- 作业四是语者辨识,语者辨识要做的事情是,这个x也是一段声音讯号,ŷ现在不是phoneme,ŷ是现在是哪一个人在说话,这样的系统,现在其实非常的有用,如果你打电话去银行的客服,现在都有自动的语者辨认系统,它会听说现在打电话进来的人,是不是客户本人,就少了客服人员问你身份验证的时间
- 作业五是做机器翻译,x就是某一个语言,比如说,这是我唯一会的一句日文,痛みを知れ,它的ŷ就是另外一句话。

训练集就要拿来训练我们的Model,训练Model的过程上週已经讲过了,训练的过程就是三个步骤
- 第一步,你要先写出一个有未知数的function,这个未知数,以后我们都用来代表,一个Model裡面所有的未知函数,所以的意思就是说,我现在有一个function叫f(x),它裡面有一些未知的参数,这些未知的参数表示成,它的input叫做x,这个input叫做feature
- 第二步,你要定一个东西叫做loss,loss是一个function,这个loss的输入就是一组参数,去判断说这一组参数是好还是不好
- 第三步,你要解一个,Optimization的problem,你要去找一个θ,这个θ 可以让loss的值越小越好,可以让loss的值 最小的那个,我们叫做
有了以后,那你就把它拿来用在测试集上,也就是你把带入这些未知的参数,本来裡面有一些未知的参数,现在这个 用来取代,它的输入就是你现在的测试集,输出的结果 你就把它存起来,然后上传到Kaggle就结束了。
接下来你就会遇到一个问题,直接执行助教的sample code,往往只能够给你simple baseline的结果而已,如果你想要做得更好,那应该要怎麼办,
General Guide
以下就是如何让你做得更好的攻略,它适用於前期所有的作业,这个攻略是怎麼走的呢?

从最上面开始走起,第一个是你今天如果你觉得,你在Kaggle上的结果不满意的话,第一件事情你要做的事情是,检查你的training data的loss
有人说"我在意的不是应该是,testing data的loss吗,因為Kaggle上面的结果,呈现的是testing data的结果"
但是你要先检查你的training data,看看你的model在training data上面,有没有学起来,再去看testing的结果,如果你发现,你的training data的loss很大,显然它在训练集上面也没有训练好,接下来你要分析一下,在训练集上面没有学好,是什麼样的原因,这边有两个可能,第一个可能是model的bias
Model bias
model的bias这件事情,我们在上週已经跟大家讲过了,所谓model bias的意思是说,假设你的model太过简单。

举例来说,我们现在写了一个有未知parameter的function,这个未知的parameter,我们可以代各种不同的数字,你代θ¹ 得到一个function ,我们把那个function用这个,一个点来表示,θ² 得到另一个function ,你把所有的function集合起来,得到一个function的set.
但是这个function的set太小了,这个function的set裡面,没有包含任何一个function,可以让我们的loss变低,即可以让loss变低的function,不在你的model可以描述的范围内。
在这个情况下,就算你找出了一个θ*,它是这些蓝色的function裡面,最好的那一个,也无济於事了,那个loss还是不够低。
这个状况就是你想要在大海裡面捞针,这个针指的是一个loss低的function,结果针根本就不在海裡,白忙一场,你怎麼捞都捞不出针,因為针根本就不在你的,这个function set裡面,不在你的这个大海裡面,所以怎麼办?

这个时候重新设计一个model,给你的model更大的弹性,举例来说,你可以增加你输入的features,我们上週说,本来我们输入的features,只有前一天的资讯,假设我们要预测接下来的这个,观看人数的话,我们用前一天的资讯,不够多,那用56天前的资讯,那model的弹性就比较大了
你也可以用Deep Learning,增加更多的弹性,所以如果你觉得,你的model的弹性不够大,那你可以增加更多features,可以设一个更大的model,可以用deep learning,来增加model的弹性,这是第一个可以的解法。

但是并不是training的时候,loss大就代表一定是model bias,你可能会遇到另外一个问题,这个问题是什麼,这个问题是optimization做得不好,什麼意思呢?